package com.jd.idea.plugin.swing;

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.net.URL;

public class LinkLabel extends JLabel {
    private String text;// 超链接文本
    private URL url;// 链接
    private Color color = Color.BLUE;// 链接颜色

    public LinkLabel(String text, String url) {
        super("<html>" + text + "</html>");
        if(url == null) return;
        this.text = text;
        this.setForeground(Color.BLUE);
        if (!url.startsWith("http://")) {
            url = "http://" + url;
        }
        try {
            this.url = new URL(url);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        // 设置鼠标事件
        this.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                try {
                    Desktop.getDesktop().browse(LinkLabel.this.url.toURI());//最重要的是这句话，这句话是对点击标签进行web请求的关键
                } catch (IOException e1) {
                    e1.printStackTrace();
                } catch (URISyntaxException e1) {
                    e1.printStackTrace();
                }
                ;
            }

            //设置鼠标进入事件，这里只是设置了颜色
            @Override
            public void mouseEntered(MouseEvent e) {
                LinkLabel.this.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
                color = LinkLabel.this.getForeground();
                LinkLabel.this.setForeground(Color.RED);
                LinkLabel.this.setText("<html>" + LinkLabel.this.text + "</html>");
            }

            @Override
            public void mouseExited(MouseEvent e) {
                LinkLabel.this.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
                if (color != null) {
                    LinkLabel.this.setForeground(color);
                }
                LinkLabel.this.setText("<html>" + LinkLabel.this.text + "</html>");
            }
        });
    }
}